package com.ccc.boot.security.pojo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

/**
 * 用户认证信息对象
 *
 * @author superC
 * @date 2022/3/24
 * @version 0.1.0
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class AuthUserData implements UserDetails {

    private static final long serialVersionUID = 4225058777519698952L;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 状态
     */
    private Integer status;

    /**
     * 角色
     */
    private Set<AuthorityData> roles = new HashSet<>();

    public AuthUserData() {
    }

    /**
     * UserDetails中的方法
     *
     */
    @JsonIgnore
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return roles;
    }

    /* 下面这四个方法是根据某些条件来判断用户是否可用 */
    /**
     * 指示用户的帐户是否已过期
     */
    @JsonIgnore
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    /**
     * 指示用户是否被锁定或解锁
     */
    @JsonIgnore
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    /**
     * 指示用户的凭据（密码）是否已过期
     */
    @JsonIgnore
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    /**
     * 指示用户是否被启用或禁用
     */
    @JsonIgnore
    @Override
    public boolean isEnabled() {
        return status == 2;
    }

}